package com.itheima.controller;


import com.itheima.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.UUID;


@RestController
@RequestMapping("/common")
@Slf4j
public class FileUpload {
    @Value("${reggie.filePath}")
    //private String basePath;
    private String filePath;

    /**
     * 文件上传
     *
     * @param file
     * @return
     */


    @PostMapping("/upload")
    public Result<String> upload(MultipartFile file) throws IOException {
        //1.获取上传的文件的名字,形参名和上传文件名一致
        String name = file.getOriginalFilename();

        //2.获取文件后缀名的索引
        int index = name.lastIndexOf(".");
        int length = name.length();

        //3.获取后缀名
        String substring = name.substring(index, length);

        //4.使用UUID拼接后缀名
        String s = UUID.randomUUID().toString() + substring;

        //5.将文件存到本地
        file.transferTo(new File(filePath,s));

        //6.将文件名响应给前端
        return Result.success(s);
    }

    @GetMapping("/download")
    public void download(String name, HttpServletResponse response) throws IOException {
//        //1). 定义输入流，通过输入流读取文件内容
//        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(basePath + name));
//
//        //2). 通过response对象，获取到输出流
//        ServletOutputStream sos = response.getOutputStream();
//
//        //3). 通过response对象设置响应数据格式(image/jpeg)
//        response.setContentType("image/jpeg");
//
//        //4). 通过输入流读取文件数据，然后通过上述的输出流写回浏览器
//        int len = 0;
//        byte[] bytes = new byte[1024];
//        while ((len = bis.read(bytes)) != -1){
//            sos.write(bytes,0,len);
//            sos.flush();
//        }
//
//        //5). 关闭资源
//        bis.close();


        BufferedInputStream bis =null;
        try {
            //1.接收前端发送的资源名字
            bis  = new BufferedInputStream(new FileInputStream(new File(filePath,name)));

            //2.利用IOUtils的copy方法,完成数据的拷贝
            IOUtils.copy(bis,response.getOutputStream());
        } finally {
            //关流
            if (bis!=null){
                bis.close();
            }
        }
    }
}